package com.flyqiu.flow.api;

import com.flyqiu.flow.api.event.FlowEngineEvent;
import com.flyqiu.flow.api.format.IBpmnFormat;
import com.flyqiu.flow.api.cache.FlyQiuFlowCache;
import com.flyqiu.flow.api.candidate.FlowCandidateLoad;
import com.flyqiu.flow.api.deploy.IFlowDeploy;

import com.flyqiu.flow.api.script.FlyQiuFlowScriptActuator;
import com.flyqiu.flow.api.std.FlyQiuFlowObjectFactory;
import com.flyqiu.flow.event.ActInstEvent;
import com.flyqiu.flow.event.ProcInstEvent;
import com.flyqiu.flow.event.UserTaskEvent;


import java.util.List;


public interface FlyQiuFlowConfig {

    List<FlyQiuFlowCache> getProcCaches();

    List<IBpmnFormat> getBpmnFormat();

    List<FlyQiuFlowScriptActuator> getScriptActuators();

    FlyQiuFlowObjectFactory getElementObjectFactory();

    List<FlowCandidateLoad> getCandidateLoads();

    /**
     * 流程引擎事件
     *
     * @return
     */
    List<FlowEngineEvent> engineEvents();

    /**
     * 流程活动事件
     *
     * @return
     */
    List<ActInstEvent> activityEvents();


    /**
     * 流程实例事件
     *
     * @return
     */
    List<ProcInstEvent> procInstEvents();

    /**
     * 用户任务事件
     *
     * @return
     */
    List<UserTaskEvent> userTaskEvents();


    /**
     * 获取流程模型部署器
     *
     * @return
     */
    default List<IFlowDeploy> procDeploys() {
        return null;
    }



}
